﻿#ifndef _CFG_H_
#define _CFG_H_

#define NET_ENDIAN_LITTLE     1 // 1 小端存储 0 大端存储

#define DELIVER_NO_WAITTIME   -1

// debug log level
#define LOG_TO_FILE           0
#define LOG_OUTPUT_PATH       "D:/code/tcpip-protocol-stack/output.log"

#define DBG_NLOCKER_LEVEL     DBG_LEVEL_WARNING
#define DBG_MBLOCK_LEVEL      DBG_LEVEL_WARNING
#define DBG_FIXQ_LEVEL        DBG_LEVEL_WARNING
#define DBG_EXMSG_LEVEL       DBG_LEVEL_WARNING
#define DBG_PKTBUF_LEVEL      DBG_LEVEL_WARNING
#define DBG_NET_LEVEL         DBG_LEVEL_WARNING
#define DBG_NETIF_LEVEL       DBG_LEVEL_WARNING
#define DBG_LOOP_LEVEL        DBG_LEVEL_WARNING
#define DBG_NETIF_PCAP_LEVEL  DBG_LEVEL_WARNING
#define DBG_MAIN_LEVEL        DBG_LEVEL_WARNING
#define DBG_ETHER_LEVEL       DBG_LEVEL_WARNING
#define DBG_TOOLS_LEVEL       DBG_LEVEL_WARNING
#define DBG_TIMER_LEVEL       DBG_LEVEL_WARNING
#define DBG_ARP_LEVEL         DBG_LEVEL_WARNING
#define DBG_IPV4_LEVEL        DBG_LEVEL_WARNING
#define DBG_ICMPV4_LEVEL      DBG_LEVEL_WARNING
#define DBG_SOCKET_LEVEL      DBG_LEVEL_WARNING
#define DBG_RAW_LEVEL         DBG_LEVEL_WARNING
#define DBG_ROUTETBL_LEVEL    DBG_LEVEL_WARNING
#define DBG_DGRAM_LEVEL       DBG_LEVEL_INFO
#define DBG_UDP_LEVEL         DBG_LEVEL_INFO

#define EXMSG_MSG_CNT         10  //exmsg 存放消息数组大小
#define EXMSG_LOCKER          NLOCKER_THREAD // exmsg 锁的类型

#define PKTBUF_BLK_SIZE       256 // 存放数据块的 每块内存的 大小
#define PKTBUF_BLK_CNT        1024 // 存放数据块的内存的数量 1024
#define PKTBUF_BUF_CNT        128 // 用于存放数据包的内存块的数量 128
#define PKTBUF_LOCKER         NLOCKER_THREAD // 锁的类型

#define NETIF_NAME_SIZE       32 // 网络接口名称长度
#define NETIF_HWADDR_SIZE     6 // 网络接口硬件地址长度
#define IPV4_ADDR_SIZE        4 // ip地址长度
#define NETIF_INQ_SIZE        50 // 网络收发定长队列长度
#define NETIF_OUTQ_SIZE       50
#define NETIF_DEV_CNT         10 // 网络接口最大数量

#define ETHER_HWA_SIZE        6 // 以太网协议中用于存放硬件地址的长度
#define ETHER_MTU             1500 // 以太网协议中数据包最大长度
#define ETHER_DATA_MIN        46 // 以太网协议中数据包最小长度

#define TIMER_NAME_SIZE       32 // 定时器名称大小

// ARP
#define ARP_CACHE_SIZE        20
#define ARP_MAX_PKT_WAITING   10 // 一个arp表项的缓存队列中最多可以存放几个包
#define ARP_TIMER_TMO         2000 // arp表项每隔多长时间刷新一次,单位ms
#define ARP_ENTRY_PENDING     2000 // arp表项等待更新有效时间
#define ARP_ENTRY_STABLE_TMO  1200000 // arp稳定状态下有效时间
#define ARP_ENTRY_RETRY_CNT   3 // arp请求重传次数

// ipv4
#define NET_IP_DEFAULT_TTL    64 // ipv4数据包默认ttl
#define IP_FRAGS_MAX_NR       10 // 最大允许同时存储的分片数据包表项数量
#define IPFRAGS_MAX_BUF_NR    20 // 每一个分片数据包，最大存储分片数量 
#define IP_FRAGS_SCAN_PERIOD  1  // ip分片扫描周期，单位s
#define IP_FRAG_TMO           5 // ip分片最大超时时间，以s为单位
#define IP_RTTABLE_SIZE       30 // 录音表项最大数量

// socket
#define ALL_SOCKET_TYPE_NUM   2

#define RAW_MAX_NR            10 // RAW类型socket最大数量
#define RAW_MAX_RECV          50 // RAW类型socket包缓存队列最大数量

#define DGRAM_MAX_NR         10 // DBGRAM类型socket最大数量
#define NET_PORT_DYN_START   1024 // 能分配的最小端口号
#define NET_PORT_DYN_END     65535 // 能分配的最大端口号
#define DGRAM_MAX_RECV          50 // RAW类型socket包缓存队列最大数量

#endif